describe('Nodes to host callback', function () {
  var callback = require('../../../src/lib/nodes_to_host');
  var expect = require('expect.js');

  // example node list that would come back from "GET _cluster/nodes"
  var nodes = require('../../fixtures/short_node_list.json');
  var nodes20 = require('../../fixtures/short_node_list.2.0.json');

  context('pre 2.0 nodes style', function () {
    it('properly creates host objects', function () {
      var hosts = callback(nodes);
      expect(hosts.length).to.be(2);
      expect(hosts[0]).to.eql({
        host: '10.10.10.100',
        port: 9205,
        _meta: {
          id: 'id1',
          name: 'Headknocker',
          hostname: 'Spencers-MacBook-Pro.local',
          version: '0.90.5'
        }
      });
      expect(hosts[1]).to.eql({
        host: '10.10.10.101',
        port: 9205,
        _meta: {
          id: 'id2',
          name: 'Buttknocker',
          hostname: 'Johns-MacBook-Pro.local',
          version: '0.90.5'
        }
      });
    });
  });

  context('2.0 nodes style', function () {
    it('properly creates host objects', function () {
      var hosts = callback(nodes20);
      expect(hosts.length).to.be(2);
      expect(hosts[0]).to.eql({
        host: '10.10.10.100',
        port: 9205,
        _meta: {
          id: 'id1',
          name: 'Headknocker',
          hostname: 'Spencers-MacBook-Pro.local',
          version: '0.90.5'
        }
      });
      expect(hosts[1]).to.eql({
        host: 'published.hostname',
        port: 9205,
        _meta: {
          id: 'id2',
          name: 'Buttknocker',
          hostname: 'Johns-MacBook-Pro.local',
          version: '0.90.5'
        }
      });
    });
  });


  it('ignores hosts that don\'t have an http_host property', function () {
    var hosts = callback({
      node_id: {
        not: 'much of a node'
      }
    });

    expect(hosts.length).to.be(0);
  });

  it('throws an error when the host property is not formatted properly', function () {
    expect(function () {
      callback({
        node_id: {
          http_address: 'not actually an http host'
        }
      });
    }).to.throwException(/^Malformed http_address/);
  });

});
